package gbase

import (
	"fmt"
)

//func ENotFound[T any](code ...T) error {
//	if len(code) > 0 {
//		return fmt.Errorf("未找到数据【%v】", code[0])
//	}
//	return fmt.Errorf("未找到数据")
//}
//
//func ENotOwner[T any](code ...T) error {
//	if len(code) > 0 {
//		return fmt.Errorf("无权操作该数据【%v】", code[0])
//	}
//	return fmt.Errorf("无权操作该数据")
//}
//
//func ENoAuth[T any](code ...T) error {
//	if len(code) > 0 {
//		return fmt.Errorf("权限不足【%v】", code[0])
//	}
//	return fmt.Errorf("权限不足")
//}

//func EServer[T any](code ...T) error {
//	if len(code) > 0 {
//		return fmt.Errorf("服务器繁忙【%v】", code[0])
//	}
//	return fmt.Errorf("服务器繁忙")
//}

//var (
//	ErrNotFound = errors.WithSafeDetails()
//)

type Err struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

func (e *Err) Error() string {
	if e.Code != 0 {
		return fmt.Sprintf("[%d]%s", e.Code, e.Msg)
	}
	return e.Msg
}

func NewErr(msg string, code ...int) error {
	if len(code) > 0 {
		return &Err{Code: code[0], Msg: msg}
	}
	return &Err{Msg: msg}
}

func ENotFound(data ...any) error {
	if len(data) > 0 {
		return NewErr(fmt.Sprintf("未找到【%v】数据", data[0]), ErrCodeNotFound)
		//return errors.Errorf("未找到【%v】数据", code[0])
	}
	return NewErr("未找到数据", ErrCodeNotFound)
	//return errors.Errorf("未找到数据")
}

func ENoAuth(data ...any) error {
	if len(data) > 0 {
		return NewErr(fmt.Sprintf("权限不足【%v】", data[0]), ErrCodeNotAuth)
		//return errors.Errorf("权限不足【%v】", code[0])
	}
	return NewErr("权限不足", ErrCodeNotAuth)
	//return errors.Errorf("权限不足")
}

func ENotOwner(data ...any) error {
	if len(data) > 0 {
		return NewErr(fmt.Sprintf("该数据【%v】不属于你", data[0]), ErrCodeNotOwner)
	}
	return NewErr("该数据不属于你", ErrCodeNotOwner)
}

func EServer(data ...any) error {
	if len(data) > 0 {
		return NewErr(fmt.Sprintf("服务器繁忙【%v】", data[0]), ErrCodeServer)
		//return errors.Errorf("服务器繁忙【%v】", code[0])
	}
	return NewErr("服务器繁忙", ErrCodeServer)
	//return errors.Errorf("服务器繁忙")
}
